package com.yfp.goods.controller;

import cn.hutool.core.bean.BeanUtil;
import com.yfp.common.core.domain.R;
import com.yfp.common.core.utils.poi.ExcelUtil;
import com.yfp.common.core.web.controller.BaseController;
import com.yfp.common.core.web.page.TableDataInfo;
import com.yfp.common.log.annotation.Log;
import com.yfp.common.log.enums.BusinessType;
import com.yfp.goods.domain.GoodsType;
import com.yfp.goods.domain.vo.GoodsTypeExportVO;
import com.yfp.goods.domain.vo.GoodsTypeVo;
import com.yfp.goods.service.GoodsTypeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * 商品类型表(GoodsType)表控制层
 *
 *
 * @since 2023-12-20 22:23:09
 */
@Tag(name = "配菜分类管理")
@RestController
@RequestMapping("goodsType")
public class GoodsTypeController extends BaseController {
    /**
     * 服务对象
     */
    @Resource
    private GoodsTypeService goodsTypeService;

    /**
     * 分页查询
     *
     * @param goodsType   筛选条件
     * @return 查询结果
     */
    @Operation(summary = "分页查询商品类型")
    @GetMapping
    public TableDataInfo queryByPage(GoodsType goodsType) {
        startPage();
        return getDataTable(this.goodsTypeService.queryByPage(goodsType));
    }

    @PostMapping("/export")
    @Operation(summary = "配菜分类导出")
    public void export(HttpServletResponse response, GoodsType goodsType){
        List<GoodsType> goodsTypes = this.goodsTypeService.queryByPage(goodsType);
        List<GoodsTypeExportVO> goodsTypeExportVOS = BeanUtil.copyToList(goodsTypes, GoodsTypeExportVO.class);

        ExcelUtil<GoodsTypeExportVO> util = new ExcelUtil<>(GoodsTypeExportVO.class);
        util.exportExcel(response, goodsTypeExportVOS, "配菜分类");
    }

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @Operation(summary = "通过主键查询单条数据")
    @GetMapping("{id}")
    public R<GoodsType> queryById(@PathVariable("id") String id) {
        return R.ok(this.goodsTypeService.queryById(id));
    }

    /**
     * 新增数据
     *
     * @param goodsTypeName
     * @return 新增结果
     */
    @Operation(summary = "新增商品类型")
    @PostMapping
    @Log(title = "新增商品类型", businessType = BusinessType.INSERT)
    public R<GoodsType> add(@RequestParam("goodsTypeName") @Valid String goodsTypeName, @RequestParam("cityName") @Valid String cityName) {
        return R.ok(this.goodsTypeService.insert(goodsTypeName,cityName));
    }

    /**
     * 编辑数据
     *
     * @param goodsTypeVo 实体
     * @return 编辑结果
     */
    @Operation(summary = "修改商品类型名称")
    @PostMapping("update")
    @Log(title = "修改商品类型", businessType = BusinessType.UPDATE)
    public R<GoodsType> edit(@RequestBody @Valid GoodsTypeVo goodsTypeVo) {
        return R.ok(this.goodsTypeService.update(goodsTypeVo));
    }

    @Operation(summary = "禁用/启用商品类型")
    @PutMapping("dis/{goodsTypeId}")
    @Log(title = "禁用/启用商品类型", businessType = BusinessType.UPDATE)
    public R disableGoodsType(@PathVariable String  goodsTypeId) {
        return this.goodsTypeService.disableGoodsType(goodsTypeId) ? R.ok() : R.fail();
    }


}

